home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / madwifi / net80211 / ieee80211_var.h < prev    next >
C/C++ Source or Header  |  2006-05-11  |  30KB  |  649 lines

  1. /*-
  2.  * Copyright (c) 2001 Atsushi Onoe
  3.  * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. The name of the author may not be used to endorse or promote products
  15.  *    derived from this software without specific prior written permission.
  16.  *
  17.  * Alternatively, this software may be distributed under the terms of the
  18.  * GNU General Public License ("GPL") version 2 as published by the Free
  19.  * Software Foundation.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  22.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  23.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  24.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  25.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  26.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  30.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * $Id: ieee80211_var.h 1512 2006-04-18 17:43:09Z dyqith $
  33.  */
  34. #ifndef _NET80211_IEEE80211_VAR_H_
  35. #define _NET80211_IEEE80211_VAR_H_
  36.  
  37. /*
  38.  * Definitions for IEEE 802.11 drivers.
  39.  */
  40. #define    IEEE80211_DEBUG
  41. #undef    IEEE80211_DEBUG_REFCNT            /* node refcnt stuff */
  42.  
  43. #include <net80211/ieee80211_linux.h>
  44.  
  45. #include <sys/queue.h>
  46.  
  47. #include <net80211/_ieee80211.h>
  48. #include <net80211/ieee80211.h>
  49. #include <net80211/ieee80211_crypto.h>
  50. #include <net80211/ieee80211_ioctl.h>        /* for ieee80211_stats */
  51. #include <net80211/ieee80211_node.h>
  52. #include <net80211/ieee80211_power.h>
  53. #include <net80211/ieee80211_proto.h>
  54. #include <net80211/ieee80211_scan.h>
  55.  
  56. #define    IEEE80211_TXPOWER_MAX    100    /* .5 dBm units */
  57. #define    IEEE80211_TXPOWER_MIN    0    /* kill radio */
  58.  
  59. #define    IEEE80211_DTIM_MAX    15    /* max DTIM period */
  60. #define    IEEE80211_DTIM_MIN    1    /* min DTIM period */
  61. #define    IEEE80211_DTIM_DEFAULT    1    /* default DTIM period */
  62.  
  63. #define    IEEE80211_BINTVAL_MAX    500    /* max beacon interval (TU's) */
  64. #define    IEEE80211_BINTVAL_MIN    25    /* min beacon interval (TU's) */
  65. #define    IEEE80211_BINTVAL_DEFAULT 100    /* default beacon interval (TU's) */
  66.  
  67. #define    IEEE80211_BGSCAN_INTVAL_MIN    15    /* min bg scan intvl (secs) */
  68. #define    IEEE80211_BGSCAN_INTVAL_DEFAULT    (5*60)    /* default bg scan intvl */
  69.  
  70. #define    IEEE80211_BGSCAN_IDLE_MIN    100    /* min idle time (ms) */
  71. #define    IEEE80211_BGSCAN_IDLE_DEFAULT    250    /* default idle time (ms) */
  72.  
  73. #define IEEE80211_COVERAGE_CLASS_MAX    31    /* max coverage class */
  74. #define IEEE80211_REGCLASSIDS_MAX    10    /* max regclass id list */
  75.  
  76. #define    IEEE80211_PS_SLEEP    0x1    /* STA is in power saving mode */
  77. #define    IEEE80211_PS_MAX_QUEUE    50    /* maximum saved packets */
  78.  
  79. #define    IEEE80211_XR_BEACON_FACTOR    3    /* factor between xr Beacon interval and normal beacon interval */
  80. #define    IEEE80211_XR_DEFAULT_RATE_INDEX    0    
  81. #define    IEEE80211_XR_FRAG_THRESHOLD    540    
  82.  
  83. #define    IEEE80211_FIXED_RATE_NONE    -1
  84.  
  85. #define IEEE80211_SWBMISS_THRESHOLD    10 /* software beacon miss threshold, in TU's */
  86.  
  87. #define    IEEE80211_MS_TO_TU(x)    (((x) * 1000) / 1024)
  88. #define    IEEE80211_TU_TO_MS(x)    (((x) * 1024) / 1000)
  89. #define    IEEE80211_TU_TO_JIFFIES(x) ((IEEE80211_TU_TO_MS(x) * HZ) / 1000)
  90.  
  91. #define IEEE80211_PWRCONSTRAINT_VAL(ic) \
  92.     (((ic)->ic_bsschan->ic_maxregpower > (ic)->ic_curchanmaxpwr) ? \
  93.         (ic)->ic_bsschan->ic_maxregpower - (ic)->ic_curchanmaxpwr : 0)
  94.  
  95. /*
  96.  * 802.11 control state is split into a common portion that maps
  97.  * 1-1 to a physical device and one or more "Virtual AP's" (VAP)
  98.  * that are bound to an ieee80211com instance and share a single
  99.  * underlying device.  Each VAP has a corresponding OS device
  100.  * entity through which traffic flows and that applications use
  101.  * for issuing ioctls, etc.
  102.  */
  103.  
  104. /*
  105.  * Data common to one or more virtual AP's.  State shared by
  106.  * the underlying device and the net80211 layer is exposed here;
  107.  * e.g. device-specific callbacks.
  108.  */
  109. struct ieee80211vap;
  110.  
  111. struct ieee80211com {
  112.     struct net_device *ic_dev;        /* associated device */
  113.     ieee80211com_lock_t ic_comlock;        /* state update lock */
  114.     ieee80211com_lock_t ic_vapslock;     /* vap state machine lock */
  115.     TAILQ_HEAD(, ieee80211vap) ic_vaps;    /* list of vap instances */
  116.     enum ieee80211_phytype ic_phytype;    /* XXX wrong for multi-mode */
  117.     enum ieee80211_opmode ic_opmode;    /* operation mode */
  118.     struct ifmedia ic_media;            /* interface media config */
  119.     u_int8_t ic_myaddr[IEEE80211_ADDR_LEN];
  120.     struct timer_list ic_inact;        /* mgmt/inactivity timer */
  121.  
  122.     u_int32_t ic_flags;            /* state flags */
  123.     u_int32_t ic_flags_ext;            /* extension of state flags */
  124.     u_int32_t ic_caps;            /* capabilities */
  125.     u_int8_t ic_ath_cap;            /* Atheros adv. capablities */
  126.     u_int8_t ic_promisc;            /* vap's needing promisc mode */
  127.     u_int8_t ic_allmulti;            /* vap's needing all multicast*/
  128.     u_int8_t ic_nopened;            /* vap's been opened */
  129.     struct ieee80211_rateset ic_sup_rates[IEEE80211_MODE_MAX];
  130.     struct ieee80211_rateset ic_sup_xr_rates;
  131.     struct ieee80211_rateset ic_sup_half_rates;
  132.     struct ieee80211_rateset ic_sup_quarter_rates;
  133.     u_int16_t ic_modecaps;            /* set of mode capabilities */
  134.     u_int16_t ic_curmode;            /* current mode */
  135.     u_int16_t ic_lintval;            /* beacon interval */
  136.     u_int16_t ic_holdover;            /* PM hold over duration */
  137.     u_int16_t ic_bmisstimeout;        /* beacon miss threshold (ms) */
  138.     u_int16_t ic_txpowlimit;         /* global tx power limit (in 0.5 dBm) */
  139.     u_int16_t ic_newtxpowlimit;         /* tx power limit to change to (in 0.5 dBm) */
  140.     u_int16_t ic_uapsdmaxtriggers;         /* max triggers that could arrive */
  141.     u_int8_t ic_coverageclass;         /* coverage class */
  142.  
  143.     /*
  144.      * Channel state:
  145.      *
  146.      * ic_channels is the set of available channels for the device;
  147.      *    it is setup by the driver
  148.      * ic_nchans is the number of valid entries in ic_channels
  149.      * ic_chan_avail is a bit vector of these channels used to check
  150.      *    whether a channel is available w/o searching the channel table.
  151.      * ic_chan_active is a (potentially) constrained subset of
  152.      *    ic_chan_avail that reflects any mode setting or user-specified
  153.      *    limit on the set of channels to use/scan
  154.      * ic_curchan is the current channel the device is set to; it may
  155.      *    be different from ic_bsschan when we are off-channel scanning
  156.      *    or otherwise doing background work
  157.      * ic_bsschan is the channel selected for operation; it may
  158.      *    be undefined (IEEE80211_CHAN_ANYC)
  159.      * ic_prevchan is a cached ``previous channel'' used to optimize
  160.      *    lookups when switching back+forth between two channels
  161.      *    (e.g. for dynamic turbo)
  162.      */
  163.     int ic_nchans;                /* # entries in ic_channels */
  164.     struct ieee80211_channel ic_channels[IEEE80211_CHAN_MAX+1];
  165.     u_int8_t ic_chan_avail[IEEE80211_CHAN_BYTES];
  166.     u_int8_t ic_chan_active[IEEE80211_CHAN_BYTES];
  167.     struct ieee80211_channel *ic_curchan;    /* current channel */
  168.     struct ieee80211_channel *ic_bsschan;    /* bss channel */
  169.     struct ieee80211_channel *ic_prevchan;    /* previous channel */
  170.  
  171.     /* regulatory class ids */
  172.     u_int ic_nregclass;            /* # entries in ic_regclassids */
  173.     u_int8_t ic_regclassids[IEEE80211_REGCLASSIDS_MAX];
  174.  
  175.     /* scan-related state */
  176.     struct ieee80211_scan_state *ic_scan;    /* scan state */
  177.     enum ieee80211_roamingmode ic_roaming;    /* roaming mode */
  178.     unsigned long ic_lastdata;        /* time of last data frame */
  179.     unsigned long ic_lastscan;        /* time last scan completed */
  180.  
  181.     /* NB: this is the union of all vap stations/neighbors */
  182.     struct ieee80211_node_table ic_sta;    /* stations/neighbors */
  183.  
  184.     /* XXX multi-bss: split out common/vap parts? */
  185.     struct ieee80211_wme_state ic_wme;    /* WME/WMM state */
  186.  
  187.     /* XXX multi-bss: can per-vap be done/make sense? */
  188.     enum ieee80211_protmode    ic_protmode;    /* 802.11g protection mode */
  189.     u_int16_t ic_nonerpsta;            /* # non-ERP stations */
  190.     u_int16_t ic_longslotsta;        /* # long slot time stations */
  191.     u_int16_t ic_sta_assoc;            /* stations associated */
  192.     u_int16_t ic_dt_sta_assoc;        /* dturbo capable stations */
  193.     u_int16_t ic_xr_sta_assoc;        /* XR stations associated */
  194.     
  195.     /*
  196.      * Spectrum Management.
  197.      */
  198.     u_int16_t ic_country_code;
  199.     int ic_country_outdoor;
  200.     struct ieee80211_ie_country ic_country_ie; /* country info element */
  201.     /* 
  202.      *  current channel max power, used to compute Power Constraint IE.
  203.      *
  204.      *  NB: local power constraint depends on the channel, but assuming it must
  205.      *     be detected dynamically, we cannot maintain a table (i.e., will not
  206.      *     know value until change to channel and detect).
  207.      */
  208.     u_int8_t ic_curchanmaxpwr;
  209.     u_int8_t ic_chanchange_tbtt;
  210.     u_int8_t ic_chanchange_chan;
  211.  
  212.     /* virtual ap create/delete */
  213.     struct ieee80211vap *(*ic_vap_create)(struct ieee80211com *,
  214.         const char *, int, int, int, struct net_device *);
  215.     void (*ic_vap_delete)(struct ieee80211vap *);
  216.     /* send/recv 802.11 management frame */
  217.     int (*ic_send_mgmt)(struct ieee80211_node *, int, int);
  218.     void (*ic_recv_mgmt)(struct ieee80211_node *, struct sk_buff *, int,
  219.         int, u_int32_t);
  220.     /* send management frame to driver, like hardstart */
  221.     int (*ic_mgtstart)(struct ieee80211com *, struct sk_buff *);
  222.     /* reset device state after 802.11 parameter/state change */
  223.     int (*ic_init)(struct net_device *);
  224.     int (*ic_reset)(struct net_device *);
  225.     /* update device state for 802.11 slot time change */
  226.     void (*ic_updateslot)(struct net_device *);
  227.     /* new station association callback/notification */
  228.     void (*ic_newassoc)(struct ieee80211_node *, int);
  229.     /* node state management */
  230.     struct ieee80211_node *(*ic_node_alloc)(struct ieee80211_node_table *,
  231.         struct ieee80211vap *);
  232.     void (*ic_node_free)(struct ieee80211_node *);
  233.     void (*ic_node_cleanup)(struct ieee80211_node *);
  234.     u_int8_t (*ic_node_getrssi)(const struct ieee80211_node *);
  235.     u_int8_t (*ic_node_move_data)(const struct ieee80211_node *);
  236.  
  237.     /* scanning support */
  238.     void (*ic_scan_start)(struct ieee80211com *);
  239.     void (*ic_scan_end)(struct ieee80211com *);
  240.     void (*ic_set_channel)(struct ieee80211com *);
  241.  
  242.     /* u-apsd support */
  243.     void (*ic_uapsd_flush)(struct ieee80211_node *);
  244.  
  245.     /* set coverage class */
  246.     void (*ic_set_coverageclass)(struct ieee80211com *);
  247.  
  248.     /* mhz to ieee conversion */
  249.     u_int (*ic_mhz2ieee)(struct ieee80211com *, u_int, u_int);
  250. };
  251.  
  252. struct vlan_group;
  253. struct eapolcom;
  254. struct ieee80211_aclator;
  255.  
  256. struct ieee80211_nsparams {
  257.     enum ieee80211_state newstate;
  258.     int arg;
  259.     int result;
  260. };
  261.  
  262. #define IW_MAX_SPY 8
  263. struct ieee80211_spy {
  264.         u_int8_t mac[IW_MAX_SPY * IEEE80211_ADDR_LEN];
  265.         u_int8_t num;
  266. };
  267.  
  268. struct ieee80211vap {
  269.     struct net_device *iv_dev;        /* associated device */
  270.     struct net_device_stats    iv_devstats;    /* interface statistics */
  271.     struct ifmedia iv_media;            /* interface media config */
  272. #ifdef CONFIG_NET_WIRELESS
  273.     struct iw_statistics iv_iwstats;        /* wireless statistics block */
  274. #endif
  275. #ifdef CONFIG_SYSCTL
  276.     struct ctl_table_header    *iv_sysctl_header;
  277.     struct ctl_table *iv_sysctls;
  278.     struct proc_dir_entry *iv_proc_stations;
  279.     struct proc_dir_entry *iv_proc;
  280. #endif
  281.     struct vlan_group *iv_vlgrp;        /* vlan group state */
  282.  
  283.     TAILQ_ENTRY(ieee80211vap) iv_next;    /* list of vap instances */
  284.     u_int iv_unit;                /* virtual AP unit */
  285.     struct ieee80211com *iv_ic;        /* back ptr to common state */
  286.     u_int32_t iv_debug;            /* debug msg flags */
  287.     struct ieee80211_stats iv_stats;        /* statistics */
  288.  
  289.     int iv_monitor_nods_only;        /* in monitor mode only nods traffic */
  290.     int iv_monitor_txf_len;            /* in monitor mode, truncate tx packets */
  291.  
  292.     int (*iv_newstate)(struct ieee80211vap *, enum ieee80211_state, int);
  293.     u_int8_t iv_myaddr[IEEE80211_ADDR_LEN];
  294.     u_int32_t iv_flags;            /* state flags */
  295.     u_int32_t iv_flags_ext;            /* extension of state flags */
  296.     u_int32_t iv_caps;            /* capabilities */
  297.     u_int8_t iv_ath_cap;            /* Atheros adv. capablities */
  298.     enum ieee80211_opmode iv_opmode;    /* operation mode */
  299.     enum ieee80211_state iv_state;        /* state machine state */
  300.     struct timer_list iv_mgtsend;        /* mgmt frame response timer */
  301.                         /* inactivity timer settings */
  302.     int iv_inact_init;            /* setting for new station */
  303.     int iv_inact_auth;            /* auth but not assoc setting */
  304.     int iv_inact_run;            /* authorized setting */
  305.     int iv_inact_probe;            /* inactive probe time */
  306.  
  307.     int iv_des_nssid;            /* # desired ssids */
  308.     struct ieee80211_scan_ssid iv_des_ssid[1];/* desired ssid table */
  309.     u_int8_t iv_des_bssid[IEEE80211_ADDR_LEN];
  310.     struct ieee80211_channel *iv_des_chan;    /* desired channel */
  311.     u_int16_t iv_des_mode;            /* desired mode */
  312.     int iv_nicknamelen;            /* XXX junk */
  313.     u_int8_t     iv_nickname[IEEE80211_NWID_LEN];
  314.     u_int iv_bgscanidle;            /* bg scan idle threshold */
  315.     u_int iv_bgscanintvl;            /* bg scan min interval */
  316.     u_int iv_scanvalid;            /* scan cache valid threshold */
  317.     struct ieee80211_roam iv_roam;        /* sta-mode roaming state */
  318.  
  319.     u_int32_t *iv_aid_bitmap;        /* association id map */
  320.     u_int16_t iv_max_aid;
  321.     u_int16_t iv_sta_assoc;            /* stations associated */
  322.     u_int16_t iv_ps_sta;            /* stations in power save */
  323.     u_int16_t iv_ps_pending;            /* ps sta's w/ pending frames */
  324.     u_int8_t *iv_tim_bitmap;            /* power-save stations w/ data*/
  325.     u_int16_t iv_tim_len;            /* ic_tim_bitmap size (bytes) */
  326.     u_int8_t iv_dtim_period;            /* DTIM period */
  327.     u_int8_t iv_dtim_count;            /* DTIM count from last bcn */
  328.                         /* set/unset aid pwrsav state */
  329.     void (*iv_set_tim)(struct ieee80211_node *, int);
  330.     u_int8_t iv_uapsdinfo;            /* sta mode QoS Info flags */
  331.     struct ieee80211_node *iv_bss;        /* information for this node */
  332.     int iv_fixed_rate;            /* 802.11 rate or -1 */
  333.     u_int16_t iv_rtsthreshold;
  334.     u_int16_t iv_fragthreshold;
  335.     u_int16_t iv_txmin;            /* min tx retry count */
  336.     u_int16_t iv_txmax;            /* max tx retry count */
  337.     u_int16_t iv_txlifetime;            /* tx lifetime */
  338.     int iv_inact_timer;            /* inactivity timer wait */
  339.     void *iv_opt_ie;            /* user-specified IE's */
  340.     u_int16_t iv_opt_ie_len;            /* length of ni_opt_ie */
  341.     u_int16_t iv_def_txkey;            /* default/group tx key index */
  342.     struct ieee80211_key iv_nw_keys[IEEE80211_WEP_NKID];
  343.     int (*iv_key_alloc)(struct ieee80211vap *, const struct ieee80211_key *);
  344.     int (*iv_key_delete)(struct ieee80211vap *, const struct ieee80211_key *,
  345.         struct ieee80211_node *);
  346.     int (*iv_key_set)(struct ieee80211vap *, const struct ieee80211_key *,
  347.         const u_int8_t mac[IEEE80211_ADDR_LEN]);
  348.     void (*iv_key_update_begin)(struct ieee80211vap *);
  349.     void (*iv_key_update_end)(struct ieee80211vap *);
  350. #ifdef ATH_SUPERG_COMP
  351.     void (*iv_comp_set)(struct ieee80211vap *, struct ieee80211_node *, int);
  352. #endif
  353.     const struct ieee80211_authenticator *iv_auth;/* authenticator glue */
  354.     void *iv_ec;                /* private auth state */
  355.     struct ieee80211vap *iv_xrvap;        /* pointer to XR VAP , if XR is enabled */
  356.     u_int16_t iv_xrbcnwait;            /* SWBA count incremented until it reaches XR_BECON_FACTOR */
  357.     struct timer_list iv_xrvapstart;    /* timer to start xr */
  358.     u_int8_t iv_chanchange_count;         /* 11h counter for channel change */
  359.     int iv_mcast_rate;             /* Multicast rate (Kbps) */
  360.  
  361.     const struct ieee80211_aclator *iv_acl;    /* aclator glue */
  362.     void *iv_as;                /* private aclator state */
  363.  
  364.     struct timer_list iv_swbmiss;        /* software beacon miss timer */
  365.     u_int16_t iv_swbmiss_period;         /* software beacon miss timer period */
  366.     struct ieee80211_nsparams iv_nsparams;    /* new state parameters for tasklet for stajoin1 */
  367.     struct IEEE80211_TQ_STRUCT iv_stajoin1tq; /* tasklet for newstate action called from stajoin1tq */
  368.     unsigned int iv_nsdone;            /* Done with scheduled newstate tasklet */
  369.     uint8_t    wds_mac[IEEE80211_ADDR_LEN];
  370.     struct ieee80211_spy iv_spy;             /* IWSPY support */
  371. };
  372. MALLOC_DECLARE(M_80211_VAP);
  373.  
  374. #define    IEEE80211_ADDR_NULL(a1)    (memcmp(a1, "\x00\x00\x00\x00\x00\x00", \
  375.     IEEE80211_ADDR_LEN) == 0)
  376. #define    IEEE80211_ADDR_EQ(a1,a2)    (memcmp(a1,a2,IEEE80211_ADDR_LEN) == 0)
  377. #define    IEEE80211_ADDR_COPY(dst,src)    memcpy(dst,src,IEEE80211_ADDR_LEN)
  378.  
  379. /* ic_flags */
  380. #define    IEEE80211_F_FF        0x00000001    /* CONF: ATH FF enabled */
  381. #define    IEEE80211_F_TURBOP    0x00000002    /* CONF: ATH Turbo enabled*/
  382. #define    IEEE80211_F_PROMISC    0x00000004    /* STATUS: promiscuous mode */
  383. #define    IEEE80211_F_ALLMULTI    0x00000008    /* STATUS: all multicast mode */
  384. /* NB: this is intentionally setup to be IEEE80211_CAPINFO_PRIVACY */
  385. #define    IEEE80211_F_PRIVACY    0x00000010    /* CONF: privacy enabled */
  386. #define    IEEE80211_F_PUREG    0x00000020    /* CONF: 11g w/o 11b sta's */
  387. #define    IEEE80211_F_XRUPDATE    0x00000040    /* CONF: update beacon XR element*/
  388. #define    IEEE80211_F_SCAN    0x00000080    /* STATUS: scanning */
  389. #define    IEEE80211_F_XR        0x00000100    /* CONF: operate in XR mode */
  390. #define    IEEE80211_F_SIBSS    0x00000200    /* STATUS: start IBSS */
  391. /* NB: this is intentionally setup to be IEEE80211_CAPINFO_SHORT_SLOTTIME */
  392. #define    IEEE80211_F_SHSLOT    0x00000400    /* STATUS: use short slot time*/
  393. #define    IEEE80211_F_PMGTON    0x00000800    /* CONF: Power mgmt enable */
  394. #define    IEEE80211_F_DESBSSID    0x00001000    /* CONF: des_bssid is set */
  395. #define    IEEE80211_F_WME        0x00002000    /* CONF: enable WME use */
  396. #define    IEEE80211_F_BGSCAN    0x00004000    /* CONF: bg scan enabled */
  397. #define    IEEE80211_F_SWRETRY    0x00008000    /* CONF: sw tx retry enabled */
  398. #define IEEE80211_F_TXPOW_FIXED    0x00010000    /* TX Power: fixed rate */
  399. #define    IEEE80211_F_IBSSON    0x00020000    /* CONF: IBSS creation enable */
  400. #define    IEEE80211_F_SHPREAMBLE    0x00040000    /* STATUS: use short preamble */
  401. #define    IEEE80211_F_DATAPAD    0x00080000    /* CONF: do alignment pad */
  402. #define    IEEE80211_F_USEPROT    0x00100000    /* STATUS: protection enabled */
  403. #define    IEEE80211_F_USEBARKER    0x00200000    /* STATUS: use barker preamble*/
  404. #define    IEEE80211_F_TIMUPDATE    0x00400000    /* STATUS: update beacon tim */
  405. #define    IEEE80211_F_WPA1    0x00800000    /* CONF: WPA enabled */
  406. #define    IEEE80211_F_WPA2    0x01000000    /* CONF: WPA2 enabled */
  407. #define    IEEE80211_F_WPA        0x01800000    /* CONF: WPA/WPA2 enabled */
  408. #define    IEEE80211_F_DROPUNENC    0x02000000    /* CONF: drop unencrypted */
  409. #define    IEEE80211_F_COUNTERM    0x04000000    /* CONF: TKIP countermeasures */
  410. #define    IEEE80211_F_HIDESSID    0x08000000    /* CONF: hide SSID in beacon */
  411. #define IEEE80211_F_NOBRIDGE    0x10000000    /* CONF: disable internal bridge */
  412.  
  413. #define    IEEE80211_F_WMEUPDATE    0x20000000    /* STATUS: update beacon wme */
  414. #define IEEE80211_F_DOTH    0x40000000    /* enable 11.h */
  415. #define IEEE80211_F_CHANSWITCH    0x80000000    /* force chanswitch */
  416.  
  417. /* ic_flags_ext */
  418. #define    IEEE80211_FEXT_WDS    0x00000001    /* CONF: 4 addr allowed */
  419. #define IEEE80211_FEXT_COUNTRYIE 0x00000002    /* CONF: enable country IE */
  420. #define IEEE80211_FEXT_SCAN_PENDING 0x00000004    /* STATE: scan pending */
  421. #define    IEEE80211_FEXT_BGSCAN    0x00000008    /* STATE: enable full bgscan completion */
  422. #define IEEE80211_FEXT_UAPSD    0x00000010    /* CONF: enable U-APSD */
  423. #define IEEE80211_FEXT_SLEEP    0x00000020    /* STATUS: sleeping */
  424. #define IEEE80211_FEXT_EOSPDROP    0x00000040    /* drop uapsd EOSP frames for test */
  425. #define    IEEE80211_FEXT_MARKDFS    0x00000080    /* Enable marking of dfs interfernce */
  426. #define IEEE80211_FEXT_REGCLASS    0x00000100    /* CONF: send regclassids in country ie */
  427. #define IEEE80211_FEXT_ERPUPDATE 0x00000200    /* STATUS: update ERP element */
  428. #define IEEE80211_FEXT_SWBMISS 0x00000400    /* CONF: use software beacon timer */
  429.  
  430. #define IEEE80211_COM_UAPSD_ENABLE(_ic)        ((_ic)->ic_flags_ext |= IEEE80211_FEXT_UAPSD)
  431. #define IEEE80211_COM_UAPSD_DISABLE(_ic)    ((_ic)->ic_flags_ext &= ~IEEE80211_FEXT_UAPSD)
  432. #define IEEE80211_COM_UAPSD_ENABLED(_ic)    ((_ic)->ic_flags_ext & IEEE80211_FEXT_UAPSD)
  433. #define IEEE80211_COM_GOTOSLEEP(_ic)        ((_ic)->ic_flags_ext |= IEEE80211_FEXT_GOTOSLEEP)
  434. #define IEEE80211_COM_WAKEUP(_ic)        ((_ic)->ic_flags_ext &= ~IEEE80211_FEXT_SLEEP)
  435. #define IEEE80211_COM_IS_SLEEPING(_ic)        ((_ic)->ic_flags_ext & IEEE80211_FEXT_SLEEP)
  436.  
  437. #define IEEE80211_VAP_UAPSD_ENABLE(_v)    ((_v)->iv_flags_ext |= IEEE80211_FEXT_UAPSD)
  438. #define IEEE80211_VAP_UAPSD_DISABLE(_v)    ((_v)->iv_flags_ext &= ~IEEE80211_FEXT_UAPSD)
  439. #define IEEE80211_VAP_UAPSD_ENABLED(_v)    ((_v)->iv_flags_ext & IEEE80211_FEXT_UAPSD)
  440. #define IEEE80211_VAP_GOTOSLEEP(_v)    ((_v)->iv_flags_ext |= IEEE80211_FEXT_SLEEP)
  441. #define IEEE80211_VAP_WAKEUP(_v)    ((_v)->iv_flags_ext &= ~IEEE80211_FEXT_SLEEP)
  442. #define IEEE80211_VAP_IS_SLEEPING(_v)    ((_v)->iv_flags_ext & IEEE80211_FEXT_SLEEP)
  443. #define IEEE80211_VAP_EOSPDROP_ENABLE(_v)  ((_v)->iv_flags_ext |= IEEE80211_FEXT_EOSPDROP)
  444. #define IEEE80211_VAP_EOSPDROP_DISABLE(_v) ((_v)->iv_flags_ext &= ~IEEE80211_FEXT_EOSPDROP)
  445. #define IEEE80211_VAP_EOSPDROP_ENABLED(_v) ((_v)->iv_flags_ext & IEEE80211_FEXT_EOSPDROP)
  446.  
  447. /* ic_caps */
  448. #define    IEEE80211_C_WEP        0x00000001    /* CAPABILITY: WEP available */
  449. #define    IEEE80211_C_TKIP    0x00000002    /* CAPABILITY: TKIP available */
  450. #define    IEEE80211_C_AES        0x00000004    /* CAPABILITY: AES OCB avail */
  451. #define    IEEE80211_C_AES_CCM    0x00000008    /* CAPABILITY: AES CCM avail */
  452. #define    IEEE80211_C_CKIP    0x00000020    /* CAPABILITY: CKIP available */
  453. #define    IEEE80211_C_FF        0x00000040    /* CAPABILITY: ATH FF avail */
  454. #define    IEEE80211_C_TURBOP    0x00000080    /* CAPABILITY: ATH Turbo avail*/
  455. #define    IEEE80211_C_IBSS    0x00000100    /* CAPABILITY: IBSS available */
  456. #define    IEEE80211_C_PMGT    0x00000200    /* CAPABILITY: Power mgmt */
  457. #define    IEEE80211_C_HOSTAP    0x00000400    /* CAPABILITY: HOSTAP avail */
  458. #define    IEEE80211_C_AHDEMO    0x00000800    /* CAPABILITY: Old Adhoc Demo */
  459. #define    IEEE80211_C_SWRETRY    0x00001000    /* CAPABILITY: sw tx retry */
  460. #define    IEEE80211_C_TXPMGT    0x00002000    /* CAPABILITY: tx power mgmt */
  461. #define    IEEE80211_C_SHSLOT    0x00004000    /* CAPABILITY: short slottime */
  462. #define    IEEE80211_C_SHPREAMBLE    0x00008000    /* CAPABILITY: short preamble */
  463. #define    IEEE80211_C_MONITOR    0x00010000    /* CAPABILITY: monitor mode */
  464. #define    IEEE80211_C_TKIPMIC    0x00020000    /* CAPABILITY: TKIP MIC avail */
  465. #define    IEEE80211_C_WPA1    0x00800000    /* CAPABILITY: WPA1 avail */
  466. #define    IEEE80211_C_WPA2    0x01000000    /* CAPABILITY: WPA2 avail */
  467. #define    IEEE80211_C_WPA        0x01800000    /* CAPABILITY: WPA1+WPA2 avail*/
  468. #define    IEEE80211_C_BURST    0x02000000    /* CAPABILITY: frame bursting */
  469. #define    IEEE80211_C_WME        0x04000000    /* CAPABILITY: WME avail */
  470. #define    IEEE80211_C_WDS        0x08000000    /* CAPABILITY: 4-addr support */
  471. #define IEEE80211_C_WME_TKIPMIC    0x10000000    /* CAPABILITY: TKIP MIC for QoS frame */
  472. #define    IEEE80211_C_BGSCAN    0x20000000    /* CAPABILITY: bg scanning */
  473. #define    IEEE80211_C_UAPSD    0x40000000    /* CAPABILITY: UAPSD */
  474. /* XXX protection/barker? */
  475.  
  476. #define    IEEE80211_C_CRYPTO    0x0000002f    /* CAPABILITY: crypto alg's */
  477.  
  478. /* Atheros ABOLT definitions */
  479. #define IEEE80211_ABOLT_TURBO_G        0x01    /* Legacy Turbo G */
  480. #define IEEE80211_ABOLT_TURBO_PRIME    0x02    /* Turbo Prime */
  481. #define IEEE80211_ABOLT_COMPRESSION    0x04    /* Compression */
  482. #define IEEE80211_ABOLT_FAST_FRAME    0x08    /* Fast Frames */
  483. #define IEEE80211_ABOLT_BURST        0x10    /* Bursting */
  484. #define IEEE80211_ABOLT_WME_ELE        0x20    /* WME based cwmin/max/burst tuning */
  485. #define IEEE80211_ABOLT_XR        0x40    /* XR */
  486. #define IEEE80211_ABOLT_AR        0x80    /* AR switches out based on adjaced non-turbo traffic */
  487.  
  488. /* Atheros Advanced Capabilities ABOLT definition */
  489. #define IEEE80211_ABOLT_ADVCAP    (IEEE80211_ABOLT_TURBO_PRIME | \
  490.                  IEEE80211_ABOLT_COMPRESSION | \
  491.                  IEEE80211_ABOLT_FAST_FRAME | \
  492.                  IEEE80211_ABOLT_XR | \
  493.                  IEEE80211_ABOLT_AR | \
  494.                  IEEE80211_ABOLT_BURST | \
  495.                  IEEE80211_ABOLT_WME_ELE)
  496.  
  497. /* check if a capability was negotiated for use */
  498. #define    IEEE80211_ATH_CAP(vap, ni, bit) \
  499.     ((ni)->ni_ath_flags & (vap)->iv_ath_cap & (bit))
  500.  
  501. /* flags to VAP create function */
  502. #define IEEE80211_VAP_XR        0x10000    /* create a XR VAP without registering net device with OS */
  503.  
  504. int ieee80211_ifattach(struct ieee80211com *);
  505. void ieee80211_ifdetach(struct ieee80211com *);
  506. int ieee80211_vap_setup(struct ieee80211com *, struct net_device *,
  507.     const char *, int, int, int);
  508. int ieee80211_vap_attach(struct ieee80211vap *, ifm_change_cb_t, ifm_stat_cb_t);
  509. void ieee80211_vap_detach(struct ieee80211vap *);
  510. void ieee80211_mark_dfs(struct ieee80211com *, struct ieee80211_channel *);
  511. void ieee80211_dfs_test_return(struct ieee80211com *, u_int8_t);
  512. void ieee80211_announce(struct ieee80211com *);
  513. void ieee80211_announce_channels(struct ieee80211com *);
  514. int ieee80211_media_change(struct net_device *);
  515. void ieee80211_media_status(struct net_device *, struct ifmediareq *);
  516. int ieee80211_rate2media(struct ieee80211com*, int, enum ieee80211_phymode);
  517. int ieee80211_media2rate(int);
  518. u_int ieee80211_mhz2ieee(u_int, u_int);
  519. u_int ieee80211_chan2ieee(struct ieee80211com *,    const struct ieee80211_channel *);
  520. u_int ieee80211_ieee2mhz(u_int, u_int);
  521. struct ieee80211_channel *ieee80211_find_channel(struct ieee80211com *, int, int);
  522. int ieee80211_setmode(struct ieee80211com *, enum ieee80211_phymode);
  523. void ieee80211_reset_erp(struct ieee80211com *, enum ieee80211_phymode);
  524. enum ieee80211_phymode ieee80211_chan2mode(const struct ieee80211_channel *);
  525. void ieee80211_build_countryie(struct ieee80211com *);
  526. int ieee80211_media_setup(struct ieee80211com *, struct ifmedia *, u_int32_t,
  527.     ifm_change_cb_t, ifm_stat_cb_t);
  528.  
  529. /* 
  530.  * Key update synchronization methods.  XXX should not be visible.
  531.  */
  532. static __inline void
  533. ieee80211_key_update_begin(struct ieee80211vap *vap)
  534. {
  535.     vap->iv_key_update_begin(vap);
  536. }
  537. static __inline void
  538. ieee80211_key_update_end(struct ieee80211vap *vap)
  539. {
  540.     vap->iv_key_update_end(vap);
  541. }
  542.  
  543. /*
  544.  * XXX these need to be here for IEEE80211_F_DATAPAD
  545.  */
  546.  
  547. /*
  548.  * Return the space occupied by the 802.11 header and any
  549.  * padding required by the driver.  This works for a
  550.  * management or data frame.
  551.  */
  552. static __inline int
  553. ieee80211_hdrspace(struct ieee80211com *ic, const void *data)
  554. {
  555.     int size = ieee80211_hdrsize(data);
  556.     if (ic->ic_flags & IEEE80211_F_DATAPAD)
  557.         size = roundup(size, sizeof(u_int32_t));
  558.     return size;
  559. }
  560.  
  561. /*
  562.  * Like ieee80211_hdrspace, but handles any type of frame.
  563.  */
  564. static __inline int
  565. ieee80211_anyhdrspace(struct ieee80211com *ic, const void *data)
  566. {
  567.     int size = ieee80211_anyhdrsize(data);
  568.     if (ic->ic_flags & IEEE80211_F_DATAPAD)
  569.         size = roundup(size, sizeof(u_int32_t));
  570.     return size;
  571. }
  572.  
  573. #define    IEEE80211_MSG_DEBUG    0x40000000    /* IFF_DEBUG equivalent */
  574. #define    IEEE80211_MSG_DUMPPKTS    0x20000000    /* IFF_LINK2 equivalant */
  575. #define    IEEE80211_MSG_CRYPTO    0x10000000    /* crypto work */
  576. #define    IEEE80211_MSG_INPUT    0x08000000    /* input handling */
  577. #define    IEEE80211_MSG_XRATE    0x04000000    /* rate set handling */
  578. #define    IEEE80211_MSG_ELEMID    0x02000000    /* element id parsing */
  579. #define    IEEE80211_MSG_NODE    0x01000000    /* node handling */
  580. #define    IEEE80211_MSG_ASSOC    0x00800000    /* association handling */
  581. #define    IEEE80211_MSG_AUTH    0x00400000    /* authentication handling */
  582. #define    IEEE80211_MSG_SCAN    0x00200000    /* scanning */
  583. #define    IEEE80211_MSG_OUTPUT    0x00100000    /* output handling */
  584. #define    IEEE80211_MSG_STATE    0x00080000    /* state machine */
  585. #define    IEEE80211_MSG_POWER    0x00040000    /* power save handling */
  586. #define    IEEE80211_MSG_DOT1X    0x00020000    /* 802.1x authenticator */
  587. #define    IEEE80211_MSG_DOT1XSM    0x00010000    /* 802.1x state machine */
  588. #define    IEEE80211_MSG_RADIUS    0x00008000    /* 802.1x radius client */
  589. #define    IEEE80211_MSG_RADDUMP    0x00004000    /* dump 802.1x radius packets */
  590. #define    IEEE80211_MSG_RADKEYS    0x00002000    /* dump 802.1x keys */
  591. #define    IEEE80211_MSG_WPA    0x00001000    /* WPA/RSN protocol */
  592. #define    IEEE80211_MSG_ACL    0x00000800    /* ACL handling */
  593. #define    IEEE80211_MSG_WME    0x00000400    /* WME protocol */
  594. #define    IEEE80211_MSG_SUPG    0x00000200    /* SUPERG */
  595. #define    IEEE80211_MSG_DOTH    0x00000100    /* 11.h */
  596. #define    IEEE80211_MSG_INACT    0x00000080    /* inactivity handling */
  597. #define    IEEE80211_MSG_ROAM    0x00000040    /* sta-mode roaming */
  598.  
  599. #define    IEEE80211_MSG_ANY    0xffffffff    /* anything */
  600.  
  601. #ifdef IEEE80211_DEBUG
  602. #define    ieee80211_msg(_vap, _m)    ((_vap)->iv_debug & (_m))
  603. #define    IEEE80211_DPRINTF(_vap, _m, _fmt, ...) do {            \
  604.     if (ieee80211_msg(_vap, _m))                    \
  605.         ieee80211_note(_vap, _fmt, __VA_ARGS__);        \
  606. } while (0)
  607. #define    IEEE80211_NOTE(_vap, _m, _ni, _fmt, ...) do {            \
  608.     if (ieee80211_msg(_vap, _m))                    \
  609.         ieee80211_note_mac(_vap, (_ni)->ni_macaddr, _fmt, __VA_ARGS__);\
  610. } while (0)
  611. #define    IEEE80211_NOTE_MAC(_vap, _m, _mac, _fmt, ...) do {        \
  612.     if (ieee80211_msg(_vap, _m))                    \
  613.         ieee80211_note_mac(_vap, _mac, _fmt, __VA_ARGS__);    \
  614. } while (0)
  615. #define    IEEE80211_NOTE_FRAME(_vap, _m, _wh, _fmt, ...) do {        \
  616.     if (ieee80211_msg(_vap, _m))                    \
  617.         ieee80211_note_frame(_vap, _wh, _fmt, __VA_ARGS__);    \
  618. } while (0)
  619. void ieee80211_note(struct ieee80211vap *, const char *, ...);
  620. void ieee80211_note_mac(struct ieee80211vap *,
  621.     const u_int8_t mac[IEEE80211_ADDR_LEN], const char *, ...);
  622. void ieee80211_note_frame(struct ieee80211vap *,
  623.     const struct ieee80211_frame *, const char *, ...);
  624. #define    ieee80211_msg_debug(_vap) \
  625.     ieee80211_msg(_vap, IEEE80211_MSG_DEBUG)
  626. #define    ieee80211_msg_dumppkts(_vap) \
  627.     ieee80211_msg(_vap, IEEE80211_MSG_DUMPPKTS)
  628. #define    ieee80211_msg_input(_vap) \
  629.     ieee80211_msg(_vap, IEEE80211_MSG_INPUT)
  630. #define    ieee80211_msg_radius(_vap) \
  631.     ieee80211_msg(_vap, IEEE80211_MSG_RADIUS)
  632. #define    ieee80211_msg_dumpradius(_vap) \
  633.     ieee80211_msg(_vap, IEEE80211_MSG_RADDUMP)
  634. #define    ieee80211_msg_dumpradkeys(_vap) \
  635.     ieee80211_msg(_vap, IEEE80211_MSG_RADKEYS)
  636. #define    ieee80211_msg_scan(_vap) \
  637.     ieee80211_msg(_vap, IEEE80211_MSG_SCAN)
  638. #define    ieee80211_msg_assoc(_vap) \
  639.     ieee80211_msg(_vap, IEEE80211_MSG_ASSOC)
  640. #else
  641. #define    IEEE80211_DPRINTF(_vap, _m, _fmt, ...)
  642. #define    IEEE80211_NOTE_FRAME(_vap, _m, _wh, _fmt, ...)
  643. #define    IEEE80211_NOTE_MAC(_vap, _m, _mac, _fmt, ...)
  644. #define    ieee80211_msg_dumppkts(_vap)    0
  645. #define    ieee80211_msg(_vap, _m)        0
  646. #endif
  647.  
  648. #endif /* _NET80211_IEEE80211_VAR_H_ */
  649.